package HashTable.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
/*
* Java 提供了一个HashSet类 它用于实现基于散列表的集
* */
public class SetTest {
    public static void main(String[] args){
        /*
        1.HashSet(int initialCapacity)  构造一个空的具有指定容量的散列集
        2.HashSet(int initialCapacity, float loadFactor) 构造一个空的具有指定容量
        和装填因子(0.0~1.0 当大于这个百分比,散列集进行再散列,容量变为原来的两倍)的的散列集
        3.HashSet<String>()构造一个空散列集 并指定了类型
        * */
        var words=new HashSet<String>();
        long totalTime=0;
        int index=0;
        try(var in=new Scanner(System.in)){
            while (in.hasNext()){
                String word=in.next();
                long callTime=System.currentTimeMillis();
                words.add(word);
                callTime=System.currentTimeMillis()-callTime;
                totalTime+=callTime;
                index++;
                if(index==3)
                    break;
            }
        }
        //散列集迭代器将依次访问所有的桶 由于散列将元素分散在表里,所有将会以一种随机的顺序访问元素
        //只有不关系元素的顺序时才应该使用HashSet
        Iterator<String> iter=words.iterator();
        for(int i=1;i<=20&&iter.hasNext();i++){
            System.out.println(iter.next());
        }
        System.out.println("...");
        System.out.println(words.size()+" distinct words. "+totalTime+" milliseconds.");
    }
}
